package com.link.play.fit.ai.utils

import java.text.DecimalFormat

object PriceUtils {

    /**
     * 计算折扣价占原价的百分比
     * @param originalPriceStr 原价字符串 (如 "US$39.99")
     * @param discountedPriceStr 折扣价字符串 (如 "US$19.99")
     * @param decimalPlaces 保留小数位数 (默认2位)
     * @return 百分比字符串 (如 "50.00%")，无法计算时返回"--%"
     */
    @JvmStatic
    @JvmOverloads
    fun calculatePercentage(
        originalPriceStr: String,
        discountedPriceStr: String,
        decimalPlaces: Int = 2
    ): String {
        return try {
            // 1. 提取纯数字
            val originalPrice = extractNumber(originalPriceStr)
            val discountedPrice = extractNumber(discountedPriceStr)

            // 2. 安全检查
            if (originalPrice <= 0.0) return "--%"

            // 3. 计算百分比
            val percentage = (discountedPrice / originalPrice) * 100

            // 4. 格式化输出
            formatPercentage(percentage, decimalPlaces)
        } catch (e: Exception) {
            "50%"
        }
    }

    // 从字符串中提取数字（支持含千位分隔符的数字）
    private fun extractNumber(priceStr: String): Double {
        // 正则移除所有非数字字符（保留小数点和负号）
        val cleaned = priceStr.replace("[^\\d.-]".toRegex(), "")
        return cleaned.toDouble()
    }

    // 格式化百分比（自动处理四舍五入）
    private fun formatPercentage(value: Double, decimalPlaces: Int): String {
        require(decimalPlaces >= 0) { "小数位数不能为负数" }

        val pattern = when {
            decimalPlaces == 0 -> "#%"
            else -> "#.${"0".repeat(decimalPlaces)}%"
        }

        return DecimalFormat(pattern).format(value / 100)
    }
}
